package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.model.domain.ProductoVO;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.domain.DesProdTipoCliVO;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;

@ViewScoped
@ManagedBean
public class TipoClienteEdit implements Serializable {
	private static final long serialVersionUID = -5790330940979532687L;
	
	private TipoClienteVO tipoCliente;
	private SujetoServicio servicio  = new SujetoServicioImpl();
	private String deshabilitarGuardar = "false";
	private String nombre = "";
	private String porcentaje;
	private Boolean nombreValido = true;
	private Boolean porcentajeValido = true;
	private List<DesProdTipoCliVO> productosConDescuentos = new ArrayList<DesProdTipoCliVO>();
	
	//--- CONSTRUCTOR --------
	public TipoClienteEdit(){
		getTipoDeClienteAndProductosConDescuentos();
	}
	
	private void getTipoDeClienteAndProductosConDescuentos(){
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		tipoCliente = (TipoClienteVO) sessionParams.get("tipoCliente");
		if(tipoCliente != null){
			fc.getExternalContext().getSessionMap().remove("tipoCliente");
			this.nombre = tipoCliente.getNombre();
			productosConDescuentos = servicio.getProductosConDescuentoByTipoCliente(tipoCliente);
		}
	}
	//--- END CONSTRUCTOR  ---
	
	//--- METODOS DE BOTONES ---
	public String btnModificar(TipoClienteVO tp, List<DesProdTipoCliVO> productos){
		if (servicio.updateTipoCliente(tipoCliente,productos).equals(ConstantModel.SUCCESS)) {
			return Constante.URL_TIPO_CLIENTE_LIST;
		}else{
			FacesContext.getCurrentInstance().addMessage("", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"Error no puede Modificarse el registro", "para continuar "));
			return null;	
		}
	}  
	
	public String btnCancelar(){
		return Constante.URL_TIPO_CLIENTE_LIST;
	}
	//--------------------------
	
	//--- VALIDACION ---
	public void listener(){
		
		if (this.tipoCliente.getNombre().isEmpty() || this.tipoCliente.getNombre() == null){
			this.deshabilitarGuardar = "true";
			this.nombreValido = false;
			FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Tipo de Cliente no puede ser Vacio", "para continuar "));
		}else{
			if (this.tipoCliente.getNombre().toUpperCase().equals(this.nombre.toUpperCase())) {
				this.nombreValido = true;
				if (this.porcentajeValido){
					this.deshabilitarGuardar = "false"; //HABILITO GUARDAR		
				}
			}else{
				if (servicio.existeNombreTipoCliente(this.tipoCliente.getNombre().toUpperCase()) ){
					FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
							new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre de Cliente  Existe", "para continuar "));
					this.deshabilitarGuardar = "true";  
					this.nombreValido = false;
				}else{
					this.nombreValido = true;
					if (this.porcentajeValido){
						this.deshabilitarGuardar = "false"; //HABILITO GUARDAR	
					}
				}
			}
		}
	}
	//------------------
	
	//--- GET AND SET ---
	public TipoClienteVO getTipoCliente() {
		return tipoCliente;
	}

	public String getDeshabilitarGuardar() {
		return deshabilitarGuardar;
	}
	
	public String getPorcentaje() {
		return porcentaje;
	}

	public void setPorcentaje(String porcentaje) {
		this.porcentaje = porcentaje;
	}

	public List<DesProdTipoCliVO> getProductosConDescuentos() {
		return productosConDescuentos;
	}	
}
